﻿#include <iostream>
#include <string>
using namespace std;
class MyAdd {
public:
	int operator()(int v1, int v2)
	{
		return v1 + v2;
	}
};
class MyPrint {
public:
	MyPrint()
	{
		this->count = 0;
	}
	void operator()(string text)
	{
		cout << text << endl;
		this->count++;
	}
	int count;//内部自己状态
};
//1.函数对象在使用时，可以像普通函数那样调用，可以有参数，可以有返回值
void test01()
{
	MyAdd myAdd;
	cout<<myAdd(10, 10)<<endl;
}
//2.函数对象超出普通函数的概念，函数对象可以有自己的状态
void test02()
{
	MyPrint Myprint;
	Myprint("hello world");
	Myprint("hello world");
	Myprint("hello world");
	cout << Myprint.count << endl;//为3
}
//3.函数对象可以作为参数传递
void doPrint(MyPrint& mp,string text)
{
	mp(text); //打印hello c++
}
void test03()
{
	MyPrint myprint;
	doPrint(myprint, "hello c++");
}
int main()
{
	test01();
	test02();
	test03();
}